# 设置CMake的最低版本要求为3.10，如果版本低于3.10将报错
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)

# 定义项目名称为"recipe-05"，并指定项目使用的编程语言为C++
project(recipe-05 LANGUAGES CXX)

# 定义一个名为"processor-info"的可执行文件，初始时不指定源文件
add_executable(processor-info "")

# 为processor-info可执行文件添加源文件processor-info.cpp
target_sources(processor-info
  PRIVATE
    processor-info.cpp
  )

# 为processor-info可执行文件添加包含目录，包含构建目录
target_include_directories(processor-info
  PRIVATE
    ${PROJECT_BINARY_DIR}
  )

# 使用foreach循环查询系统信息
foreach(key
  IN ITEMS
    NUMBER_OF_LOGICAL_CORES       # 逻辑核心数
    NUMBER_OF_PHYSICAL_CORES      # 物理核心数
    TOTAL_VIRTUAL_MEMORY          # 总虚拟内存
    AVAILABLE_VIRTUAL_MEMORY      # 可用虚拟内存
    TOTAL_PHYSICAL_MEMORY         # 总物理内存
    AVAILABLE_PHYSICAL_MEMORY     # 可用物理内存
    IS_64BIT                      # 是否为64位系统
    HAS_FPU                       # 是否有浮点运算单元
    HAS_MMX                       # 是否支持MMX指令集
    HAS_MMX_PLUS                  # 是否支持MMX+指令集
    HAS_SSE                       # 是否支持SSE指令集
    HAS_SSE2                      # 是否支持SSE2指令集
    HAS_SSE_FP                    # 是否支持SSE浮点指令
    HAS_SSE_MMX                   # 是否支持SSE MMX指令
    HAS_AMD_3DNOW                 # 是否支持AMD 3DNow!指令
    HAS_AMD_3DNOW_PLUS            # 是否支持AMD 3DNow!+指令
    HAS_IA64                      # 是否支持IA64架构
    OS_NAME                       # 操作系统名称
    OS_RELEASE                    # 操作系统版本号
    OS_VERSION                    # 操作系统版本信息
    OS_PLATFORM                   # 操作系统平台
  )
  # 查询系统信息并将结果存储在_${key}变量中
  cmake_host_system_information(RESULT _${key} QUERY ${key})
endforeach()

# 使用configure_file生成config.h文件，替换@ONLY标记的变量
configure_file(config.h.in config.h @ONLY)
